基于VC++的機車數(shù)據(jù)監(jiān)控系統(tǒng)
摘 要:機車數(shù)據(jù)監(jiān)控系統(tǒng)運用VC++實現(xiàn)了對一內(nèi)燃機車運行數(shù)據(jù)的實時監(jiān)控。通過計算機的串口傳輸內(nèi)燃機車數(shù)據(jù)儀中采集到的各種數(shù)據(jù),如機車型號、機車類型、累計運行時間等等,監(jiān)控機車的運行狀態(tài)以實現(xiàn)對機車的控制。設(shè)計的重點在于系統(tǒng)管理的軟件方面,具體來說是系統(tǒng)上位機的設(shè)計。以MFC (Microsoft Foundation Class Library)思路用類來實現(xiàn)串行通信和多線程編程, 并輔助以開放式數(shù)據(jù)接口(ODBC)在應(yīng)用程序中實現(xiàn)數(shù)據(jù)庫功能。
關(guān)鍵詞:監(jiān)控系統(tǒng);串行通信;多線程;ODBC; MFC
Abstract: The Diesel Monitor System effects the real-time monitoring on the diesel with vc++6.0, which regulates data flow by correspondencing between two serial ports. All kinds of data acquired by data graphic instrument e.g. locomotive ID, locomotive type and cumulative run-time etc. is transmitted for monitoring and control the diesel. The important point in this design is developing upper machine. Using the conception of Class in MFC (Microsoft Foundation Class Library) to effect multi-thread and serial communication, and with auxiliary to ODBC (Open Database Connectivity) the application program can have database.
Key Words: Monitor system; Serial Communication; Multi-thread; ODBC; MFC
1 引言
隨著鐵路信息化數(shù)字化的發(fā)展,提出了機車的在線實時監(jiān)控,要求對車載設(shè)備的相關(guān)數(shù)據(jù)進行實時采集和存儲。這對為技術(shù)人員提供及時準(zhǔn)確的機車信息,保證列車運行的安全有著重要的意義。
本文介紹一種基于VC++的機車實時監(jiān)控系統(tǒng),是由后臺控制監(jiān)控系統(tǒng)和前臺采集系統(tǒng)所組成的一個分布式集成網(wǎng)絡(luò)。當(dāng)控制監(jiān)控系統(tǒng)與內(nèi)燃機車進行通訊,則后臺控制監(jiān)控系統(tǒng)顯示計算機顯示的就是機車數(shù)據(jù)記錄儀采集到的各種機車數(shù)據(jù)。
2 功能分析
2.1 上位機的軟件功能主要有以下幾點:
1)與下位機(機車數(shù)據(jù)儀)進行通信,完成對下位機的讀寫;
2)能夠?qū)?shù)據(jù)進行有效的識別,提取數(shù)據(jù)中的有用信息(如機車型號,機車編號,機車標(biāo)稱功率等);
3)對有效數(shù)據(jù)進行處理,能夠以曲線或圖表形式顯示車輛運行狀況;
4)為數(shù)據(jù)的查找與定位提供方便的手段,便于局部數(shù)據(jù)分析;
5)具有存檔、打印功能。
2.2 上位機主控程序功能劃分:
3 軟件實現(xiàn)
3.1 通訊協(xié)議
所謂通訊協(xié)議就是通訊雙方為了達到正確傳送和接收數(shù)據(jù)而達成的一組通訊規(guī)定。它包括發(fā)送/接收數(shù)據(jù)的格式、數(shù)據(jù)編寫與解讀方法以及通訊參數(shù)的設(shè)定。在通訊協(xié)議中,通訊參數(shù)的設(shè)定是通訊的前提,包括串口的選取,波特率設(shè)定,有無奇偶校驗,數(shù)據(jù)位的位數(shù),以及停止位的位數(shù)。下面介紹一下數(shù)據(jù)的格式和數(shù)據(jù)傳送。
數(shù)據(jù)格式: 定位數(shù)據(jù)從0開始。第0-第3字節(jié)=0x57, 0x77, 0x44, 0x4C為當(dāng)量里程記錄儀轉(zhuǎn)儲數(shù)據(jù)文件類型標(biāo)識頭;累計數(shù)據(jù)共176字節(jié),占數(shù)據(jù)文件中的第24字節(jié)到第199字節(jié);瞬時數(shù)據(jù)從第256字節(jié)開始,一直到結(jié)束,數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。文件尾占3字節(jié)=0x45, 0x4e, 0x44。
數(shù)據(jù)傳送:累積數(shù)據(jù)每176個字節(jié)數(shù)據(jù)為一個數(shù)據(jù)塊;瞬時數(shù)據(jù)的數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。
下位機每發(fā)送一個數(shù)據(jù)塊,隨即就發(fā)該數(shù)據(jù)塊的校驗和,如果檢驗和有誤,就重發(fā)該數(shù)據(jù)塊;如果數(shù)據(jù)未讀完,重復(fù)本操作,直到數(shù)據(jù)讀完。 命令中的校驗占一個字節(jié),[校驗]=([命令]+[目標(biāo)代碼]+[數(shù)據(jù)].字節(jié)1+…+[數(shù)據(jù)].字節(jié)n)mod 0x100。執(zhí)行結(jié)果返回值中的校驗也占一個字節(jié),[校驗]=([執(zhí)行結(jié)果代碼]+[數(shù)據(jù)].字節(jié)1+…+[數(shù)據(jù)].字節(jié)n)mod 0x100。
3.2 通訊流程
監(jiān)控系統(tǒng)與下位機(機車數(shù)據(jù)記錄儀)的通訊只需用到以下幾條命令:查詢下位機硬件工作狀態(tài)、查詢下位機數(shù)據(jù)紀(jì)錄狀態(tài)、讀累計數(shù)據(jù)、讀瞬時數(shù)據(jù)、寫數(shù)據(jù)。在上位機發(fā)出命令之前,下位機處于等待狀態(tài);當(dāng)命令發(fā)出之后,下位機探測所發(fā)出的命令并判斷該命令是否對自己操作。如果是,則按命令要求返回所要求的數(shù)據(jù);如果不是,則不回應(yīng);下位機收到采集系統(tǒng)送過來的數(shù)據(jù)以后,對它進行分析和數(shù)據(jù)轉(zhuǎn)換,然后進行顯示和保存。
將上位機的各種命令獨立地建立一個類MasterCommand,就用來處理上位機向下位機發(fā)送的命令。以下是對這個類的定義。
//命令碼,命令碼長度,命令顯示字串,獲取的數(shù)據(jù)長度/最大長度,數(shù)據(jù)放置起始位置,數(shù)據(jù)標(biāo)識定義位置
MasterCommand(ch ar *comCode, const int &comCodeLen, CString comDispStr, const int &getDataLen, const int &dataPos, const int &dataSignPos)
?。?/font>
init(comCode, comCodeLen, comDispStr, getDataLen, dataPos, dataSignPos);
?。?/font>
3.2.1 查詢
A. 查詢下位機硬件工作狀態(tài)
用戶通過串口發(fā)送命令,如果命令正確執(zhí)行,則返回硬件的工作狀態(tài),根據(jù)數(shù)據(jù)交換
命令集可以判斷硬件工作得是否正常。程序?qū)⒂布ぷ鳡顟B(tài)顯示在用戶界面上,讓用戶可以很方便地了解硬件的工作狀態(tài),如果發(fā)現(xiàn)硬件有工作不正常的狀態(tài),就可以對硬件進行相應(yīng)的處理。
B. 查詢下位機數(shù)據(jù)紀(jì)錄狀態(tài)
用戶通過串口發(fā)送命令,如果命令正確執(zhí)行,則返回下位機數(shù)
據(jù)記錄狀態(tài),根據(jù)數(shù)據(jù)交換命令集可以判斷數(shù)據(jù)記錄是否正常。如果數(shù)據(jù)記錄不正常,用戶也可以在界面上看到是哪方面出了問題,可以進行相應(yīng)的處理。
3.2.2 讀數(shù)據(jù)
A. 讀累計數(shù)據(jù)
用戶在上位機發(fā)送讀累計數(shù)據(jù)的命令,下位機收到命令后向上位機返回執(zhí)行結(jié)果。執(zhí)行結(jié)果返回值:[執(zhí)行結(jié)果代碼] [數(shù)據(jù)] [校驗]。
其中: [執(zhí)行結(jié)果代碼] 和 [校驗] 均占一個字節(jié)。當(dāng)命令校驗失敗或執(zhí)行失敗時,下位機只返回 [執(zhí)行結(jié)果代碼] 和 [校驗] 碼。累計數(shù)據(jù)一共占176個字節(jié),在當(dāng)量儀數(shù)據(jù)存儲格式中對每一個字節(jié)都有詳細的定義。在程序中按照格式將數(shù)據(jù)取出來,并在用戶界面顯示出來。在所有數(shù)據(jù)正確接收后用戶可以選擇保存數(shù)據(jù),以供以后進一步地查看,對數(shù)據(jù)進行分析。
B. 讀瞬時數(shù)據(jù)
瞬時數(shù)據(jù)從第256字節(jié)開始,數(shù)據(jù)長度=瞬時數(shù)據(jù)的數(shù)據(jù)幀數(shù)×數(shù)據(jù)幀長;瞬時數(shù)據(jù)幀長包含幀校驗碼。
3.2.3 寫數(shù)據(jù)
主機下送數(shù)據(jù)到從機,寫當(dāng)量記錄儀中的所有累計數(shù)據(jù)。執(zhí)行正確時返回上位機要求寫入的數(shù)據(jù)(二進制表示)。便于上位機校驗。
4. 界面設(shè)計
控制系統(tǒng)的界面共有四個,它們是主界面、累計數(shù)據(jù)顯示界面、選擇寫入下位機數(shù)據(jù)界面。
?、?主界面
主界面是系統(tǒng)運行的主要界面,它的作用向下位機是發(fā)送各種命令和對串口通訊的參數(shù)進行設(shè)置,通過各種命令才會實現(xiàn)系統(tǒng)采集實時數(shù)據(jù)和進行監(jiān)控的功能。也只有在發(fā)送各種命令時才會調(diào)用和顯示其他功能界面(如累計數(shù)據(jù)顯示界面等),也就是說主界面是其他功能界面的聯(lián)系紐帶。
在主界面的設(shè)計中采用了組合框、樹形視圖、列表框等控件,在界面下方的列表框中可以顯示運行的程序、出錯報告及系統(tǒng)的狀態(tài)等。
?。?)累計數(shù)據(jù)顯示界面
此界面的作用是當(dāng)上位機完成了采集下位機的累計數(shù)據(jù)時,可以由用戶選擇是否顯示采集的累計數(shù)據(jù)。用戶檢查了機車的累計數(shù)據(jù)后,可以在界面對累計數(shù)據(jù)進行更改,然后就將數(shù)據(jù)進行保存,以便將來對數(shù)據(jù)進行管理。
(3) 選擇寫入下位機數(shù)據(jù)界面
提交
超越傳統(tǒng)直覺,MATLAB/Simulink助力重型機械的智能化轉(zhuǎn)型
新大陸自動識別精彩亮相2024華南國際工業(yè)博覽會
派拓網(wǎng)絡(luò)被Forrester評為XDR領(lǐng)域領(lǐng)導(dǎo)者
智能工控,存儲強基 | ??低晭砭手黝}演講
展會|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會